iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
Modern Web

.NET教我做人系列 第 7

Day 7 今天不lambda甚麼時候浪!

  • 分享至 

  • xImage
  •  

嗨~大家好啊,不知不覺已經到第七天了,今天又是新的開始,說道今天的主題前,先想看看昨天我們在介紹LINQ時,是不是會使用到WhereSelectJoin等等相關得方法,但你會不會好奇裡面的寫法怎會出現像u => u.name(x, y) => x + y這類寫法,這寫法就對應到了今天的主題lambda,除了C#以外還有很多語言都會用到lambda,但是在不同程式語言上都有不太一樣的解釋,這裡的話我就以C#的lambda來做介紹

說到lambda,你一定要對這符號不陌生=>,所有的規則都一定會造著這個符號走,有了規則後,下一步我們要知道在符號的兩邊要放甚麼東西,正常的情況下左邊的部分會放我們要輸入的參數,參數的部分也不是像放甚麼就放,右邊的話就釋放你要你要做的事,這裡主要分為兩大類
運算式lambda陳述式lambda,這兩種應該從字面上就很好懂

lambda 的概念可以寫成 輸入 => 黑箱 => 輸出

name = (a, b) => a + b

以上面這個例子來說,其實name取甚麼並不是那麼重要,這也就是匿名方式的概念
再來(a, b)是我們要輸入的參數,這裡的參數不用特別給型別也能使用
最後的地方就是要處理的動作,像上面a + b就是對這兩個數值做相加

在我們沒用 lambda前寫的方式又長又臭

static int Test(int x, int y)
{
    return x + y;
}
Func<int, int , int> test = Test;
int z = test(100, 50);
Console.WriteLine(z);

使用 lambda後,變得簡單乾淨,也很好去做更動

Func<double , double , double> test = (x, y) => x * y;
double z = test(100, 50);
Console.WriteLine(z);

剛才我們有說 lambda可以分成運算式陳述式兩種方式,下面也是用簡單的方式看看他們不同的地方

運算式

沒參數的運算式

Action act () => Console.WriteLine("this is no parameters");
act();

有參數的運算式

Action<string ,int > act = (name, age) => Console.WriteLine($"{name}今年{age}歲");
act("王8", 18);

陳述式

沒參數的陳述式

Action act () => Console.WriteLine("this is no parameters");
act();

有參數的陳述式

Func<double, double, string> func = (height, weight) => {
    double bmi = weight / (height * height);
    switch (bmi)
    {
        case <18.5:
        {
            return "你是猴子嗎,還不吃多一點";
        }
        case >24:
        {
            return "你都胖成這樣還不趕快把手上的洋芋片給我";
        }
        default:
        {
            return "很好,你跟正常人一樣普通";
        }
    }
};
Console.WriteLine(func(1.75, 80));

做完這種練習後我心想,有差嗎?除了多了括號我看不出不同點,但是看了官網說:運算式 lambda 的主體可以包含方法呼叫陳述式 lambda 的主體可以包含任意數目的陳述式,說實話看完我還是不懂,這可能要在我之後有遇到問題才能確切的體會

說到這裡最都口渴了,感覺差不多了,但是最後我還要說一下,lambda除了使用在委派型別的狀況以外,另一種常見的地方就是昨天說的LINQ,這也是我今天為甚麼要做這個題目的原因,由於在之後會很常用到LINQlambda所以希望這兩個東西能了解在幹嘛的

最後今天也真的到尾聲了,如果大家有想瞭解更深的話大家可以到官網去了解喔,那我們就明天見了~~~

參考資料:
https://docs.microsoft.com/zh-tw/dotnet/csharp/language-reference/operators/lambda-expressions
https://www.youtube.com/watch?v=eq_LrLDUL8A&list=PLJgD_fXVXZKpcoQ297GBMvw_AC3AvnoDz&index=22
https://www.gss.com.tw/blog/c-lambda%E4%BB%8B%E7%B4%B9
https://ithelp.ithome.com.tw/articles/10100451
https://medium.com/@newpage0720/%E5%B0%8Dc-%E7%9A%84-lambda-%E7%9A%84%E7%90%86%E8%A7%A3-438e6de01305


上一篇
Day 6 用LINE不如用LINQ
下一篇
Day 8 依賴注入(DI)
系列文
.NET教我做人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言